互動事件顧名思義,就是前後端之間的互動啦!現在要從頁面上觸發後端的 Function 不用在自己寫 JavaScript 然後用 AJAX 去幫你觸發啦,也不用為了一個功能多寫一隻 Route。透過 Livewire 直接無痛呼叫寫在 Livewire 內的 function,用起來體感滿分!!
今天就使用簡單的計數器來當範例,每當按下按鈕就會讓值加1:
class Day7 extends Component
{
    public $count = 0;
    public function addCount()
    {
      $this->count++;
    }
    ...
<div>
    <h2>{{ $count }}</h2>
    <button wire:click="addCount">+</button>
</div>
非常簡單的就完成了與後端的互動!!
注意:每次互動都會使頁面重新渲染
| 事件 | 語法 | 
|---|---|
| 點擊 | wire:click | 
| 按鍵 | wire:keydown | 
| 送出 | wire:submit | 
或是一些頁面元件有支援的事件,例如 wire:change
範例:
<input wire:keydown.enter="addCount">
<form wire:submit.prevent="save">
    ...
    <button>Save</button>
</form>
當然要傳遞參數也是能夠輕鬆做的:
public function setCount($value)
{
    $this->count = $value;
}
<button wire:click="setCount(100)">設為100</button>
Livewire 也提供了一些方法,好讓你更輕鬆的去操作。
| Function | 功能 | 
|---|---|
| $refresh | 重新渲染頁面,注意:並不是將頁面重置的意思 | 
| $set('property', value) | 可以直接改這個變數的值 | 
| $toggle('property') | 同上,但是是改 Boolean 的值 | 
| $emit('event', ...params) | 觸發全域事件,後面章節會介紹 | 
| $event | 能保存事件的特殊變數,像是 wire:change="setSomeProperty($event.target.value)",跟 Vue 在觸發事件時拿到的類似,會拿到 DOM 發生的事件,詳見 MDN 文件 - Event | 
這裡就使用最常用到的 $set 來做範例,直接將計數器設為 999。
 <button wire:click="$set('count', 999)">999</button>
運行之後打開 http://127.0.0.1:8000/day7 就能看到今天的範例啦!
檔案的話分別在:
app\Http\Livewire\Example\Day7.php
resources\views\livewire\example\day7.balde.php